home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 2 / Gekikoh Dennoh Club Vol. 2 (Japan).7z / Gekikoh Dennoh Club Vol. 2 (Japan) (Track 01).bin / fsw / zm302 / zm302_s.lzh / MPSRC045.LZH / ADP_0102.HAS < prev    next >
Text File  |  1996-06-16  |  5KB  |  200 lines

  1. *=======================================================
  2. *
  3. *    ADPCM->PCM 7.8kHz変換
  4. *
  5. *=======================================================
  6.  
  7. AtoP7n        macro        _X,_vol
  8.  
  9.         local        next
  10.  
  11.     .if    _X
  12.         cmpa.l        a3,a0            * トラップにかかった?
  13.         bcs        next
  14.         jsr        (a4)            * トラップ処理
  15.     .endif
  16. next:        moveq.l        #0,d0            * (4)
  17.         move.b        (a0)+,d0        * (8)
  18.         add.w        d0,d0            * (4)
  19.         adda.w        d0,a2            * (8)
  20.         add.w        (a2),d1            * (8)
  21.     .if    _vol=8
  22.         add.w        d1,(a1)+
  23.         add.w        d1,(a1)+
  24.     .else
  25.         move.w        d1,d0            * (4)
  26.         VOLUME        _vol,d0,d2
  27.         add.w        d0,(a1)+
  28.         add.w        d0,(a1)+
  29.     .endif
  30.         add.w        256*2(a2),d1        * (12)
  31.     .if    _vol=8
  32.         add.w        d1,(a1)+
  33.         add.w        d1,(a1)+
  34.     .else
  35.         move.w        d1,d0            * (4)
  36.         VOLUME        _vol,d0,d2
  37.         add.w        d0,(a1)+
  38.         add.w        d0,(a1)+
  39.     .endif
  40.         adda.w        256*2*2(a2),a2        * (16)
  41.  
  42.         endm
  43.  
  44. *=======================================================
  45.  
  46. AtoP_0102_mac    macro        _vol
  47.  
  48.         local        ADPCM_odd
  49.  
  50.         tst.b        CH_ODDEVEN(a5)        * ODD/EVEN FLAG    のチェック
  51.         bpl        ADPCM_odd        * 変換が1ADPCMずれる場合
  52.  
  53. *        前が奇数番目のADPCMを処理していた場合
  54. @@:        moveq.l        #(MIX_SIZE/2)-1,d2    * (4) 今回の処理中になんらかの
  55.         add.l        a0,d2            * (8) トラップが発生するか調べる
  56.         cmp.l        a3,d2            * (6)
  57.         bcs        @f            * (10)
  58.  
  59. *        トラップ判定あり
  60.         moveq.l        #MIX_SIZE/2-1,d6
  61. 1:        AtoP7n        1,_vol
  62.         dbra        d6,1b
  63.         move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  64.     .if    _vol=8
  65.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  66.     .else
  67.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  68.     .endif
  69.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  70.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  71.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  72.         rts
  73.  
  74. *        トラップ判定無し
  75. @@:        moveq.l        #MIX_SIZE/2-1,d6    * ADPCM -> PCM 変換
  76. 1:        AtoP7n        0,_vol
  77.         dbra        d6,1b
  78.         move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  79.     .if    _vol=8
  80.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  81.     .else
  82.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  83.     .endif
  84.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  85.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  86.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  87.         rts
  88.  
  89. *        前が偶数番目のADPCMを処理していた場合
  90. ADPCM_odd:    moveq.l        #(MIX_SIZE/2),d2    * (4) 今回の処理中になんらかの
  91.         add.l        a0,d2            * (8) トラップが発生するか調べる
  92.         cmp.l        a3,d2            * (6)
  93.         bcs        @f            * (10)
  94.  
  95. *        トラップ判定あり
  96.     .if    _vol=8
  97.         add.w        d1,(a1)+
  98.         add.w        d1,(a1)+
  99.     .else
  100.         move.w        d1,d0
  101.         VOLUME        _vol,d0,d2
  102.         add.w        d0,(a1)+
  103.         add.w        d0,(a1)+
  104.     .endif
  105.         moveq.l        #MIX_SIZE/2-1-1,d6    * ADPCM -> PCM 変換
  106. 1:        AtoP7n        1,_vol
  107.         dbra        d6,1b
  108.                             * ラストの1回
  109.         cmpa.l        a3,a0            * トラップにかかった?
  110.         bcs        1f
  111.         jsr        (a4)            * トラップ処理
  112. 1:        moveq.l        #0,d0            * (4)
  113.         move.b        (a0)+,d0        * (8)
  114.         add.w        d0,d0            * (4)
  115.         adda.w        d0,a2            * (8)
  116.         add.w        (a2),d1            * (8)
  117.         move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  118.     .if    _vol=8
  119.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  120.         add.w        d1,(a1)+
  121.         add.w        d1,(a1)+
  122.     .else
  123.         move.w        d1,d0            * (4)
  124.         VOLUME        _vol,d0,d2
  125.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  126.         add.w        d0,(a1)+
  127.         add.w        d0,(a1)+
  128.     .endif
  129.         add.w        256*2(a2),d1        * (12)
  130.         adda.w        256*2*2(a2),a2        * (16)
  131.  
  132.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  133.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  134.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  135.         rts
  136.  
  137. *        トラップ判定無し
  138. @@:
  139.     .if    _vol=8
  140.         add.w        d1,(a1)+
  141.         add.w        d1,(a1)+
  142.     .else
  143.         move.w        d1,d0
  144.         VOLUME        _vol,d0,d2
  145.         add.w        d0,(a1)+
  146.         add.w        d0,(a1)+
  147.     .endif
  148.         moveq.l        #MIX_SIZE/2-1-1,d6    * ADPCM -> PCM 変換
  149. 1:        AtoP7n        0,_vol
  150.         dbra        d6,1b
  151.                             * ラストの1回
  152.         moveq.l        #0,d0            * (4)
  153.         move.b        (a0)+,d0        * (8)
  154.         add.w        d0,d0            * (4)
  155.         adda.w        d0,a2            * (8)
  156.         add.w        (a2),d1            * (8)
  157.         move.w        d1,CH_LAST_PCM(a5)    * 前回変換終了時のPCM値 = d1.w
  158.     .if    _vol=8
  159.         move.w        d1,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  160.         add.w        d1,(a1)+
  161.         add.w        d1,(a1)+
  162.     .else
  163.         move.w        d1,d0            * (4)
  164.         VOLUME        _vol,d0,d2
  165.         move.w        d0,CH_LAST_VPCM(a5)    * 最後のPCM値(音量変換後)
  166.         add.w        d0,(a1)+
  167.         add.w        d0,(a1)+
  168.     .endif
  169.         add.w        256*2(a2),d1        * (12)
  170.         adda.w        256*2*2(a2),a2        * (16)
  171.  
  172.         move.w        d1,CH_AtoP_Y(a5)    * PCM予測値 = d1.w
  173.         move.l        a0,CH_PCM_ADR(a5)    * ADPCMアドレス = a0.l
  174.         move.l        a2,CH_AtoP_X(a5)    * ADPCM->PCM変換テーブルアドレス = a2.l
  175.         rts
  176.  
  177.         endm
  178.  
  179. *=======================================================
  180.  
  181. AtoP_0102_v00:    AtoP_0102_mac    0
  182. AtoP_0102_v01:    AtoP_0102_mac    1
  183. AtoP_0102_v02:    AtoP_0102_mac    2
  184. AtoP_0102_v03:    AtoP_0102_mac    3
  185. AtoP_0102_v04:    AtoP_0102_mac    4
  186. AtoP_0102_v05:    AtoP_0102_mac    5
  187. AtoP_0102_v06:    AtoP_0102_mac    6
  188. AtoP_0102_v07:    AtoP_0102_mac    7
  189. AtoP_0102_v08:    AtoP_0102_mac    8
  190. AtoP_0102_v09:    AtoP_0102_mac    9
  191. AtoP_0102_v10:    AtoP_0102_mac    10
  192. AtoP_0102_v11:    AtoP_0102_mac    11
  193. AtoP_0102_v12:    AtoP_0102_mac    12
  194. AtoP_0102_v13:    AtoP_0102_mac    13
  195. AtoP_0102_v14:    AtoP_0102_mac    14
  196. AtoP_0102_v15:    AtoP_0102_mac    15
  197. AtoP_0102_vnn:    AtoP_0102_mac    'n'
  198. AtoP_0102_non:    AtoP_0102_mac    'x'
  199.  
  200.